home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / diskutil / ccache.arc / cstat.c < prev    next >
C/C++ Source or Header  |  1989-04-05  |  2KB  |  89 lines

  1. /*
  2.  * Disk Cache statistics
  3.  */
  4.  
  5. #include <osbind.h>
  6. #include "cache.h"
  7.  
  8. #define    reg    register
  9.  
  10. int    verbose = 0;
  11. extern    char *    c1_4f();
  12.  
  13. main(argc, argv)
  14.     char **    argv;
  15. {
  16.   reg    int    i = 1, n;
  17.   reg    short *    stats;
  18.   reg    Cache *    cache;
  19.     int    dev = 0
  20.     int    total;
  21.  
  22.     if (i < argc && argv[i][0]=='-') {
  23.         verbose = 1;
  24.         i ++;
  25.     }
  26.     if (i < argc)
  27.         if ('a' <= argv[i][0] && argv[i][0] <= 'z')
  28.             dev = argv[i][0] - 'a';
  29.  
  30.     stats = Rwabs(CSTAT, 0L, 0, 0, dev);
  31.     cache = Rwabs(CSTAT, 0L, 0, 1, dev);
  32.     if (stats == NULL || cache == NULL) {
  33.         printf("Cache not installed\n");
  34.         return 1;
  35.     }
  36.  
  37.     total = stats[0];
  38.     if (total==0) {
  39.         printf("No statistics yet\n");
  40.         return 1;
  41.     }
  42.  
  43.     printf("Cache hits %s, ",    c1_4f(stats[HITS], total));
  44.     printf("Disk reads %s, ",    c1_4f(stats[READS]-stats[HITS], total));
  45.     printf("Disk writes %s; ",    c1_4f(stats[WRITES], total));
  46.     printf("Buffer reclaims%s\n",    c1_4f(stats[RECLMS], total));
  47.  
  48.     if (!verbose)
  49.         return 0;
  50.  
  51.     n = 0;
  52.     for (i = 0; i < NSECT; i ++) {
  53.         short    avg, buf;
  54.         avg = cache[i].avg;
  55.         buf = cache[i].buf;
  56.         if (avg > 0 || buf != NOBUF) {
  57.             printf("%4d%c%5s  ",
  58.             i, (buf == NOBUF) ? '.' : ':', c1_4f(avg, total));
  59.             if (++n % 6 == 0)
  60.             printf("\n");
  61.         }
  62.     }
  63.     printf("\n");
  64.     return 0;
  65. }
  66.  
  67. /* convert a/b in %1.3f format */
  68. char * c1_4f(a, b)
  69.     int a, b;
  70. {
  71.     register int i;
  72.     register long l;
  73.     register char * p;
  74.     static char buf [12];
  75.  
  76.     p = buf;
  77.     l = a;
  78.     i = a/b;
  79.     *p++ = (0<i && i<=9) ? '0'+i : ' ';
  80.     *p++ = '.';
  81.     for (i = 1; i <= 4; i++) {
  82.         l = 10*(l%b);
  83.         *p++ = '0' + (short)(l/b);
  84.     }
  85.     *p = '\0';
  86.     return buf;
  87. }
  88.  
  89.